# -*- coding: utf-8 -*-
from mod.server import extraServerApi
from mod_log import logger
import copy
import json
import os
import random
import yaml
import codecs
from legendaryPowerScript._lpcommon import apiUtil
from legendaryPowerScript.item.legendaryItem import LegendaryItem
from mod_log import logger
class ItemType:
    """
    物品类型
    从common/items中读取的每个物品类型都会变成一个ItemType类
    此外，在GetItemType中，若传入的物品类型以 minecraft: 开头，则会自动生成一个原版物品的ItemType

    Attributes:
        - name (str): 物品的名称。
        - path (str): 物品的路径。
        - useInfileId (bool): 表示是否使用文件内ID。
        - itemType (str): 物品的类型，默认为"minecraft:wooden_sword"。
        - auxValue (int): 物品的附加值，默认为0。
        - displayName (str): 物品的显示名称，默认为None。
        - description (list[str]): 物品的描述列表。
        - itemHadInDesc (list[str]): 物品描述中包含的物品列表。
        - isVanilla (bool): 表示是否是原版物品。
        - rank (str): 物品的品级。
        - stars (int): 物品的星级。
        - canStore (bool): 表示是否可以放入仓库，默认为True。
        - overlay (str): 覆盖字。
        - modelAttachments (dict[str, str]): 模型附件。
        - flyAttachments (dict[str, str]): 飞行模型附件。
        - isTradable (bool): 表示物品是否可交易，默认为True。
        - lockedAfterTrade (bool): 表示物品在交易后是否被锁定，默认为True。
        - removeIfAmountZero (bool): 表示当物品数量为零时是否移除，默认为True。
        - requireTradable (bool): 表示是否需要解绑才能装备，默认根据配置决定。
        - autoBind (bool): 表示是否自动绑定，默认为False。
        - isResultTradable (bool): 表示抽奖产出的物品是否可交易，默认为False。
        - isGenerated (bool): 表示物品是否已生成，默认为False。
        - disguiseSet (str): 幻化套装。
        - standAnimation (dict[str, str]): 静止动画。
        - moveAnimation (dict[str, str]): 移动动画。
        - flyStandAnimation (dict[str, str]): 飞行静止动画。
        - flyMoveAnimation (dict[str, str]): 飞行移动动画。
        - grantsSkill (str): 赋予的技能。
        - boundModel (str): 绑定的实体模型。
        - spawnInVanillaLoot (bool): 表示物品是否生成在原版宝箱中。
        - slot2Skill (dict[int, str]): 技能槽位列表。
        - modelName (str): 模型名称。
        - hidePieces (list[str]): 隐藏部位。
        - particles (list[str]): 特效列表。
        - templateName (str): 模板名称。
        - enhanceAddLevel (int): 强化增加等级。
        - enhanceMultiplier (float): 强化增加属性比例。
        - enhanceMultiplierPerLevel (float): 强化每级增加属性比例。
        - enhanceMultiplierOverride (dict[str, float]): 强化增加属性的特殊节点。
        - requireClass (str): 需要的职业。
        - enhanceSideStats (list[str]): 强化增加副词条。
        - enhanceSideStatsCount (int): 强化副词条上限。
        - enhanceMaxLevel (int): 强化上限。
        - enhanceSideStatsLevel (list[int]): 强化副属性等级列表。
        - enhanceMainStat (str): 主词条。
        - enhanceMainStatAmount (float): 强化主词条的属性比例。
        - enhanceConsumeEquip (dict[str, int]): 强化消耗其他装备。
        - enhancePriceM (float): 强化价格系数。
        - offerEnhanceXp (int): 提供的强化经验。
        - enhanceConsumeXpBase (int): 强化经验基数。
        - enhanceConsumeXpOffset (int): 强化经验偏移。
        - enhanceConsumeXpM (float): 强化经验系数。
        - enhanceConsumeXpC (float): 强化经验指数。
        - consumeItemKeyword (str): 消耗经验物品关键词。
        - tagEnhanceRate (float): 词条强化增幅。
        - jadeEnhanceMultiplier (float): 宝石强化增加倍率。
        - jadeEmbedableOn (str): 可镶嵌的位置。
        - fetchSource (str): 获取方式。
        - editedFetchSource (bool): 是否已编辑获取方式。
        - breakThroughLevels (dict[str, int]): 突破等级。
        - maxedOutMessage (str): 达到强化上限时显示的信息。
        - isWing (bool): 是否为翅膀。
        - isGlider (bool): 是否为滑翔翼。
        - glideCommand (str): 滑翔翼的飞行指令。
        - glideBuffs (list[str]): 滑翔翼的飞行BUFF。
        - sellInto (str): 可售出的物品名称。
        - sellIntoUnBound (str): 可与其他玩家交易的物品名称。
        - sellPrice (int): 出售价格。
        - classIcon (str): 职业图标。
        - equipCommands (list[str]): 装备指令。
        - getCommands (list[str]): 获取指令。
        - getCommandsInstead (list[str]): 改为获取指令。
        - useCommands (list[str]): 使用指令。
        - sellCommands (list[str]): 出售指令。
        - sellLabel (str): 出售标签。
        - restrictSellCount (bool): 是否限制售卖次数。
        - useCooldown (float): 使用冷却时间。
        - useable (bool): 物品是否可以用于快捷栏。
        - useReqLevel (bool): 是否需要在特定等级才能使用物品。
        - useConsume (int): 使用物品消耗量。
        - useInvConsume (int): 在背包中使用物品的消耗量。
        - useCooldownType (str): 冷却类型。
        - useLabel (str): 物品使用标签。
        - invUseCommands (list[str]): 在背包中使用指令。
        - swapTag (dict): 替换词条。
        - boundTags (list): 绑定的词条。
        - setTags (dict): 套装词条。
        - setKeyword (str): 套装名称。
        - changeModelTexture (str): 更改模型纹理。
        - isQuest (bool): 物品是否为任务物品。
        - maxStackSize (int): 物品最大可堆叠数量。
        - jadeCategory (str): 宝石类型。
        - mergeInto (str): 可以将该物品合并到的物品名称。
        - mergeCosts (dict): 合并所需材料。
        - moneyId (int): 货币类型。
        - weightPerItem (int): 单个物品的重量。
        - variableId (str): 变量类型。
        - enhanceCosts (dict): 强化所需材料。
        - petCanUseScript (str): 精灵使用条件脚本。
        - petOnUseScript (str): 精灵使用时脚本。
        - isPet (bool): 物品是否为宠物。
    """

    def getEnhanceMultiplier(self, enhance):
        # type: (float) -> float
        """
        获取强化增强属性的倍率。

        参数：
            - enhance (float)：增强值

        返回：
            - enhanceMultiplier (float)：增强倍率
        """
        return 0.0


    def _markGrantedSkillTemp(self):
        # type: () -> None
        """
        标记装备此物品获得的技能为临时技能。（在卸下装备时移除技能）
        """
        pass

    def toItem(self, amount=1, skipGenerate=False):
        # type: (int, bool) -> LegendaryItem
        """
        将此物品类型转化为LegendaryItem对象。

        参数：
            - amount (int)：数量，默认为1
            - skipGenerate (bool)：是否跳过生成，默认为False

        返回：
            - item (LegendaryItem)：转化后的LegendaryItem对象
        """
        pass

class Quality:
    # type: () -> None
    """
    表示物品品质的类。
    属性：
        - name (str)：品质名称
        - id (int)：品质ID
        - multiplier (float)：属性乘以倍数
        - weight (float)：品质比重

    方法：
        - randomQuality() -> Quality：随机获取一个品质对象
    """
    self.- name  = ""
    self.- id  = 0
    self.- multiplier  = 0.0
    self.- weight  = 0.0

    def __init__(self, name, data):
        # type: (str, dict) -> None
        """
        参数：
            - name (str)：品质名称
            - data (dict)：包含品质属性的数据字典
        """
        pass

    @classmethod
    def randomQuality(cls):
        # type: () -> Quality
        """
        随机Roll一个品质。
        返回：
            - quality (Quality)：随机获取的品质对象
        """
        return Quality()


def GetItemType(name):
    # type: (str) -> ItemType
    """
    这是一个Python函数，接受一个字符串参数name，并返回一个ItemType类型的值。函数会根据传入的name不同进行不同的处理：
    如果name在_itemtypes中，则直接返回它对应的ItemType类型的值；
    如果name中包含"minecraft:"，则返回一个对应原版物品的ItemType类型；
    否则，返回None。
    """
    pass

